/*
 * @Description: 命名空间
 * @Autor: CDKEY
 * @Date: 2021-07-31 05:06:25
 */

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <iostream>

//声明全局范围命名空间std
// using namespace std;

// namespace name{
//     //variables, functions, classes
// }
// name是命名空间的名字，它里面可以包含变量、函数、类、typedef、#define
// 等，最后由{ }包围

// 定义Li命名空间
namespace Li {
int age = 10;
}

namespace Han {
int age = 10;
}

// 将类定义在命名空间中
namespace Diy {
class Student {
   public:
    const char* name;
    int age;
    float score;

   public:
    void say() { printf("%s old is: %d, scope is: %f\n", name, age, score); }
};
}  // namespace Diy

void func() {
    //必须重新声明
    using namespace std;
    cout << "hello world" << endl;
}

int main() {
    // ::是一个新符号，称为域解析操作符，在C++中用来指明要使用的命名空间。
    Li::age = 20;   //使用小李定义的变量 age
    Han::age = 20;  //使用小韩定义的变量 age

    using Li::age;   //在代码的开头用using声明了 Li::age
    age = 30;        //使用小李定义的变量 age
    Han ::age = 30;  //使用小韩定义的变量 age

    using namespace Li;  //声明整个命名空间，
    age = 40;            //使用小李定义的变量 age
    Han::age = 40;       //使用小韩定义的变量 age

    Diy::Student stu1;
    stu1.name = "make";
    stu1.age = 15;
    stu1.score = 92.5f;
    stu1.say();

    //声明命名空间std
    using namespace std;
    cout << "helloworld" << endl;
    func();

    system("pause");
    return 0;
}
